﻿Public Class ucClienteCadastro

#Region "Eventos públicos acessados pelo formulário de cadastro"
    Public Event Salvo()
    Public Event Cancelado()
#End Region

#Region "Cliente"
    Public Sub Novo()
        ' Da um new no model.pessoa
        bsCliente.AddNew()
        LoadCliente()
        StatusForm(True)
    End Sub

    Public Sub Visualiza(ByVal cliente As Model.PessoaPesquisa)
        StatusForm(False)

        Dim ctCliente As New Control.Cliente

        bsCliente.DataSource = ctCliente.GetById(cliente.cd_pessoa)

        LoadCliente()
    End Sub

    Private Sub LoadCliente()
        'Dim ControlPais As New Control.Pais
        'bsPais.DataSource = ControlPais.ListaTudo()

        Dim Cliente As Model.Pessoa
        Cliente = CType(bsCliente.Current, Model.Pessoa)

        Using ControlPais As New Control.Pais
            bsPais.DataSource = ControlPais.ListaTudo()
        End Using
        'cbPais.Refresh()
        If Cliente.Pais IsNot Nothing Then
            cbPais.SelectedValue = Cliente.Pais.cd_pais
        Else
            cbPais.SelectedValue = 0
            cbPais.SelectedItem = Nothing
        End If


        ' Carrega o Estado
        Using ControlEstado As New Control.Estado
            bsEstado.DataSource = ControlEstado.ListaTudo()

            If Cliente.Estado IsNot Nothing Then
                cbEstado.SelectedValue = Cliente.Estado.cd_estado

                ' Carrega os Municipios do Estado
                Using ControlMunicipio As New Control.Municipio
                    'bsMunicipio.DataSource = ControlMunicipio.ListaTudo()
                    bsMunicipio.DataSource = ControlMunicipio.GetByEstado(Cliente.Estado)
                End Using
            Else
                cbEstado.SelectedValue = 0
                cbEstado.SelectedItem = Nothing
            End If
        End Using

        If Cliente.Municipio IsNot Nothing Then
            cbMunicipio.SelectedValue = Cliente.Municipio.cd_municipio
        Else
            cbMunicipio.SelectedValue = 0
            cbMunicipio.SelectedItem = Nothing
        End If

        ' Carrega os contatos do cliente
        ' Gambi, não está criando uma nova lista na classe quando o cliente não tem contato
        'Dim c As IList(Of Model.Contato)
        'c = CType(bsCliente.Current, Model.Pessoa).Contatos
        If CType(bsCliente.Current, Model.Pessoa).Contatos.Count < 1 Then
            Dim cont As New List(Of Model.Contato)
            CType(bsCliente.Current, Model.Pessoa).Contatos = cont
        End If
        bsContato.DataSource = CType(bsCliente.Current, Model.Pessoa).Contatos

        ' Endereço
        If CType(bsCliente.Current, Model.Pessoa).Enderecos.Count < 1 Then
            Dim enderecos As New List(Of Model.Endereco)
            CType(bsCliente.Current, Model.Pessoa).Enderecos = enderecos
        End If
        bsEndereco.DataSource = CType(bsCliente.Current, Model.Pessoa).Enderecos

        ' Endereço estado
        Using ControlEstado As New Control.Estado
            bsEnderecoEstado.DataSource = ControlEstado.ListaTudo()
        End Using

        ' Endereço município
        Using ControlMunicipio As New Control.Municipio
            bsEnderecoMunicipio.DataSource = ControlMunicipio.ListaTudo()
        End Using

        ' Endereço país
        Using ControlPais As New Control.Pais
            bsEnderecoPais.DataSource = ControlPais.ListaTudo()
        End Using




        'Dim ControPagamento As New Control.Pagamento
        'bsPagamento.DataSource = ControPagamento.ListaTudo()
    End Sub

    Private Function CamposObrigatorio() As Boolean
        'errorCamposValidos.SetError(cbxProduto, "Você deve escolher um produto")
        Dim bResult As Boolean
        bResult = True

        If txtNome.Text = "" Then
            errorCamposValidos.SetError(txtNome, "Nome obrigatóro")
            bResult = False
        End If

        Return bResult
    End Function

    Private Sub Salvar()
        If CamposObrigatorio() Then

            Dim Cliente As Model.Pessoa
            Dim ControlCliente As New Control.Cliente

            bsContato.EndEdit()
            bsEndereco.EndEdit()

            bsCliente.EndEdit()
            Cliente = CType(bsCliente.Current, Model.Pessoa)


            If cbPais.SelectedIndex > -1 Then
                Cliente.Pais = CType(bsPais.Current, Model.Pais)
            Else
                Cliente.Pais = Nothing
            End If

            If cbMunicipio.SelectedIndex > -1 Then
                Cliente.Municipio = CType(bsMunicipio.Current, Model.Municipio)
            Else
                Cliente.Municipio = Nothing
            End If

            If cbEstado.SelectedIndex > -1 Then
                Cliente.Estado = CType(bsEstado.Current, Model.Estado)
            Else
                Cliente.Estado = Nothing
            End If

            ControlCliente.Salvar(Cliente)

            ControlCliente = Nothing
            StatusForm(False)

            ' Avisa o form pricipal que salvou para retornar a pesquisa
            RaiseEvent Salvo()
        End If
    End Sub

    Private Sub Cancelar()
        ' Faz a treta toda, chama a camada control, cancela...
        bsCliente.CancelEdit()
        StatusForm(False)

        ' Avisa o form pricipal que cancelou para retornar a pesquisa
        RaiseEvent Cancelado()
    End Sub

    Private Sub Editar()
        StatusForm(True)
    End Sub

    ''' <summary>
    ''' Ativa e desativa os panels da tabpage para controlar a alteração dos campos
    ''' </summary>
    ''' <param name="Status"></param>
    ''' <remarks></remarks>
    Private Sub StatusForm(ByVal Status As Boolean)
        pnlClienteCampos.Enabled = Status
        pnlContatoBar.Enabled = Status
        pnlContatoCampos.Enabled = Status
        pnlInfAdic.Enabled = Status
        pnlEnderecoBar.Enabled = Status
        pnlEnderecoCampos.Enabled = Status
    End Sub

    Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        Salvar()
    End Sub
    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Cancelar()
    End Sub
    Private Sub bntEditar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntEditar.Click
        Editar()
    End Sub

    'Private Sub habilitaSalvarCliente(ByVal b As Boolean)
    '    btnSalvar.Enabled = b
    '    btnCancelar.Enabled = b
    'End Sub

#End Region

    'Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    '    'RaiseEvent ChamaProduto()
    '    ' Abre o form em Modal
    '    Dim FrmProduto As FrmProdutoCadastro
    '    FrmProduto = New FrmProdutoCadastro
    '    FrmProduto.ShowDialog()

    '    MessageBox.Show(FrmProduto.Produto.pr_nome)
    'End Sub

    ' Sub buscacep
    ' Retorno 
    'Dim BuscaCepa As New buscace
    'Dim enderecobuscado As enderecobuscado
    '    enderecobuscado = buscacep.buscar("88337440")

    '    Return enderecobuscado
    '    If enderecobuscado IsNot Nothing Then
    '        txtEndereco.Text = enderecobuscado.endereco
    '        cbEstado_Leave = estado
    '    End If

    '' Sub buscacepend
    'Dim BuscaCepa As New buscace
    'Dim enderecobuscado As enderecobuscado
    '    enderecobuscado = buscacep.buscar("88337440")

    '    Return enderecobuscado
    '    If enderecobuscado IsNot Nothing Then
    '        txtEndereco.Text = enderecobuscado.endereco
    '        cbEstado_Leave = estado
    '    End If
    Private Sub BuscaCEPEndereco()
        If txtEnderecoCEP.Text.Length = 8 And txtEnderecoRua.Text.Length = 0 Then
            Using BuscarCep As New Control.BuscarCep()
                Me.Cursor = Cursors.WaitCursor
                If BuscarCep.Buscar(txtEnderecoCEP.Text) Then
                    txtEnderecoRua.Text = BuscarCep.Logradouro
                    txtEnderecoBairro.Text = BuscarCep.Bairro
                    txtEnderecoComplemento.Text = BuscarCep.Complemento

                    If BuscarCep.estado IsNot Nothing Then
                        bsEnderecoEstado.DataSource = BuscarCep.Estados
                        cbEnderecoEstado.SelectedItem = BuscarCep.estado
                        cbEnderecoEstado.SelectedValue = BuscarCep.estado.cd_estado
                    End If

                    If BuscarCep.municipio IsNot Nothing Then
                        txtEnderecoMunicipio.Text = BuscarCep.municipio.municipio_nome
                        bsEnderecoMunicipio.DataSource = BuscarCep.Municipios
                        cbEnderecoMunicipio.SelectedItem = BuscarCep.municipio
                        cbEnderecoMunicipio.SelectedValue = BuscarCep.municipio.cd_municipio
                    End If

                    bsEndereco.EndEdit()
                End If
                Me.Cursor = Cursors.Arrow
            End Using
        End If
    End Sub

    Private Sub BuscaCEPCliente()
        'Core.StatusMessage.Show("Buscando CEP Online...")
        'Me.Cursor = Cursors.WaitCursor
        If txtCEP.Text.Length = 8 And txtEndereco.Text.Length = 0 Then
            Using BuscarCep As New Control.BuscarCep()
                Me.Cursor = Cursors.WaitCursor
                If BuscarCep.Buscar(txtCEP.Text) Then
                    txtEndereco.Text = BuscarCep.Logradouro
                    txtBairro.Text = BuscarCep.Bairro
                    txtComplemento.Text = BuscarCep.Complemento

                    If BuscarCep.estado IsNot Nothing Then
                        bsEstado.DataSource = BuscarCep.Estados
                        cbEstado.SelectedItem = BuscarCep.estado
                        cbEstado.SelectedValue = BuscarCep.estado.cd_estado
                    End If
                    If BuscarCep.municipio IsNot Nothing Then
                        txtMunicipio.Text = BuscarCep.municipio.municipio_nome
                        bsMunicipio.DataSource = BuscarCep.Municipios
                        cbMunicipio.SelectedItem = BuscarCep.municipio
                        cbMunicipio.SelectedValue = BuscarCep.municipio.cd_municipio
                    End If

                    bsCliente.EndEdit()
                End If
                Me.Cursor = Cursors.Arrow
            End Using
        End If

        'Using BuscaCep As New Library.Util.BuscaCEP
        '    If BuscaCep.Buscar(txtCEP.Text) Then

        '        Dim ibgeMunicipio As Integer
        '        Dim ibgeEstado As Integer
        '        Dim ctMunicipio As New Control.Municipio
        '        Dim ctEstado As New Control.Estado

        '        txtEndereco.Text = BuscaCep.Logradouro
        '        txtBairro.Text = BuscaCep.Bairro
        '        txtComplemento.Text = BuscaCep.Complemento
        '        txtMunicipio.Text = BuscaCep.Municipio


        '        ibgeMunicipio = BuscaCep.IbgeMunicipioVerificador
        '        ibgeEstado = BuscaCep.IbgeUF


        '        bsEstado.DataSource = ctEstado.ListaTudo()

        '        ' Seta Estado
        '        If ibgeEstado > 0 Then
        '            cbEstado.SelectedValue = 0
        '            cbEstado.SelectedItem = Nothing

        '            'bsEstado.DataSource = ctEstado.GetByIBGE(ibgeEstado)
        '            Dim Estado As Model.Estado = ctEstado.GetByIBGE(ibgeEstado)
        '            If Estado IsNot Nothing Then
        '                cbEstado.SelectedValue = Estado.cd_estado
        '                cbEstado.SelectedItem = Estado

        '                ' Traz somente os municípos do estado
        '                bsMunicipio.DataSource = ctMunicipio.GetByEstado(Estado)

        '                ' Seta Municipio
        '                If ibgeMunicipio > 0 Then
        '                    cbMunicipio.SelectedValue = 0
        '                    cbMunicipio.SelectedItem = Nothing

        '                    Dim Municipio As Model.Municipio = ctMunicipio.GetByIBGE(ibgeMunicipio)
        '                    If Municipio IsNot Nothing Then
        '                        cbMunicipio.SelectedValue = Municipio.cd_municipio
        '                        cbMunicipio.SelectedItem = Municipio
        '                    End If
        '                End If

        '            End If
        '        End If

        '        bsCliente.EndEdit()

        '    Else
        '        Core.StatusMessage.Show(BuscaCep.Retorno)
        '    End If
        'End Using

        'Me.Cursor = Cursors.Arrow
        'Core.StatusMessage.Show("")
    End Sub

    Private Sub CarregaMunicipioEstado()
        Dim ctMunicipio As New Control.Municipio
        bsMunicipio.DataSource = ctMunicipio.GetByEstado(CType(bsEstado.Current, Model.Estado))
    End Sub

    ''' <summary>
    ''' Seta o Estado/UF escolhido para o endereço
    ''' </summary>
    ''' <remarks>
    ''' Observações: Ainda não consegui que o combo sete automaticamente o valor escolhido no bs endereço atualmente sendo editado
    ''' Autor: Edson Tessaro
    ''' Data: 08/11/2012
    ''' </remarks>
    Private Sub EnderecoEstadoSeta()
        Dim Endereco As Model.Endereco

        Endereco = CType(bsEndereco.Current, Model.Endereco)
        If cbEnderecoEstado.SelectedIndex > -1 Then
            Endereco.Estado = CType(bsEnderecoEstado.Current, Model.Estado)
        Else
            Endereco.Estado = Nothing
        End If
    End Sub

    ''' <summary>
    ''' Seta o Município escolhido para o endereço
    ''' </summary>
    ''' <remarks>
    ''' Observações: Ainda não consegui que o combo sete automaticamente o valor escolhido no bs endereço atualmente sendo editado
    ''' Autor: Edson Tessaro
    ''' Data: 08/11/2012
    ''' </remarks>
    Private Sub EnderecoMunicipioSeta()
        Dim Endereco As Model.Endereco

        Endereco = CType(bsEndereco.Current, Model.Endereco)
        If cbEnderecoMunicipio.SelectedIndex > -1 Then
            Endereco.Municipio = CType(bsEnderecoMunicipio.Current, Model.Municipio)
        Else
            Endereco.Municipio = Nothing
        End If
    End Sub

    ''' <summary>
    ''' Seta o País escolhido para o endereço
    ''' </summary>
    ''' <remarks>
    ''' Observações: Ainda não consegui que o combo sete automaticamente o valor escolhido no bs endereço atualmente sendo editado
    ''' Autor: Edson Tessaro
    ''' Data: 08/11/2012
    ''' </remarks>
    Private Sub EnderecoPaisSeta()
        Dim Endereco As Model.Endereco

        Endereco = CType(bsEndereco.Current, Model.Endereco)
        If cbEnderecoPais.SelectedIndex > -1 Then
            Endereco.Pais = CType(bsEnderecoPais.Current, Model.Pais)
        Else
            Endereco.Pais = Nothing
        End If
    End Sub

    ''' <summary>
    ''' Carrega o pais do endereço no combo
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub EnderecoPaisLoad()
        Dim Endereco As Model.Endereco

        Endereco = CType(bsEndereco.Current, Model.Endereco)
        If Endereco.Pais IsNot Nothing Then
            cbEnderecoPais.SelectedValue = Endereco.Pais.cd_pais
        Else
            cbEnderecoPais.SelectedValue = 0
            cbEnderecoPais.SelectedItem = Nothing
        End If

    End Sub

    ''' <summary>
    ''' Carrega o Estado do endereço
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub EnderecoEstadoLoad()
        Dim Endereco As Model.Endereco

        Endereco = CType(bsEndereco.Current, Model.Endereco)
        If Endereco.Estado IsNot Nothing Then
            cbEnderecoEstado.SelectedValue = Endereco.Estado.cd_estado
        Else
            cbEnderecoEstado.SelectedValue = 0
            cbEnderecoEstado.SelectedItem = Nothing
        End If
    End Sub

    ''' <summary>
    ''' Carrega o Município do endereço
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub EnderecoMunicipioLoad()
        Dim Endereco As Model.Endereco

        Endereco = CType(bsEndereco.Current, Model.Endereco)
        If Endereco.Municipio IsNot Nothing Then
            cbEnderecoMunicipio.SelectedValue = Endereco.Municipio.cd_municipio
        Else
            cbEnderecoMunicipio.SelectedValue = 0
            cbEnderecoMunicipio.SelectedItem = Nothing
        End If
    End Sub


#Region "Contato"
    Private Sub btnContatoIncluir1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnContatoIncluir.Click
        IncluirContato()
    End Sub
    Private Sub btnContatoRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnContatoRemover.Click
        ExcluiContato()
    End Sub

    Private Sub IncluirContato()
        ' Grava uma possível alteração anterior
        bsContato.EndEdit()

        ' Novo
        bsContato.AddNew()

        ' Vincula a pessoa
        CType(bsContato.Current, Model.Contato).Pessoa = CType(bsCliente.Current, Model.Pessoa)

        'modoAlteracaoContato(True)

        txtContatoNome.Focus()
    End Sub
    'Private Sub SalvaContato()
    '    'Dim p As Model.Pessoa = CType(PessoaBindingSource.Current, Model.Pessoa)
    '    'Dim c As Model.Contato = CType(ContatoBindingSource.Current, Model.Contato)

    '    'If cbDepartamento.SelectedIndex > -1 Then
    '    '    c.Departamento = CType(DepartamentoBindingSource.Current, Model.Departamento)
    '    'End If

    '    'c.Pessoa = p

    '    'ContatoBindingSource.EndEdit()
    '    'desativaCadastroContato()

    '    bsContato.EndEdit()

    '    'CType(bsContato.Current, Model.Contato).Pessoa = CType(bsCliente.Current, Model.Pessoa)

    '    ''CType(bsCliente.Current, Model.Pessoa).Contatos.Add(CType(bsContato.Current, Model.Contato))

    '    modoAlteracaoContato(False)
    'End Sub
    'Private Sub AlteraContato()
    '    modoAlteracaoContato(True)
    'End Sub
    'Private Sub CancelarContato()
    '    bsContato.CancelEdit()
    '    modoAlteracaoContato(False)
    'End Sub
    Private Sub ExcluiContato()
        Dim contato As Model.Contato = CType(bsContato.Current, Model.Contato)
        Dim pessoa As Model.Pessoa = CType(bsCliente.Current, Model.Pessoa)

        ' Grava uma possível alteração anterior
        bsContato.EndEdit()

        If Dialog.QuestionYesNo("Deseja realmente remover este registro?") = Windows.Forms.DialogResult.Yes And Not bsContato.Current Is Nothing Then
            bsContato.Remove(contato)
            bsContato.DataSource = pessoa.Contatos
        End If
    End Sub
    'Private Sub modoAlteracaoContato(ByVal bYes As Boolean)
    '    'pnlContatoCampos.Enabled = bYes
    '    'TableLayoutPanelContato.Enabled = bYes
    '    'pnlEndereco.Enabled = Not bYes

    '    If bYes = True Then
    '        txtContatoNome.Focus()
    '    End If
    '    'btnContatoIncluir.Enabled = Not bYes
    '    'btnContatoAlterar.Enabled = Not bYes
    '    'btnContatoRemover.Enabled = Not bYes

    '    'btnContatoSalvar.Enabled = bYes
    '    'btnContatoCancelar.Enabled = bYes

    '    'habilitaSalvarCliente(Not bYes)

    '    'dgvContato.Enabled = Not bYes
    '    'ContatoBindingSource.DataSource = CType(PessoaBindingSource.Current, Model.Pessoa).Contatos
    'End Sub
#End Region

#Region "Endereço"
    Private Sub btnEnderecoIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnderecoIncluir.Click
        IncluiEndereco()
    End Sub
    Private Sub btnEnderecoRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnderecoRemover.Click
        ExcluiEndereco()
    End Sub

    Private Sub IncluiEndereco()
        ' Grava uma possível alteração anterior
        bsEndereco.EndEdit()

        ' Novo
        bsEndereco.AddNew()

        ' ' Vincula a pessoa
        CType(bsEndereco.Current, Model.Endereco).Pessoa = CType(bsCliente.Current, Model.Pessoa)

        'EnderecoBarStatus(True)
        txtEnderecoCEP.Focus()
    End Sub
    'Private Sub SalvaEndereco()
    '    bsEndereco.EndEdit()
    '    CType(bsEndereco.Current, Model.Endereco).Pessoa = CType(bsCliente.Current, Model.Pessoa)
    '    EnderecoBarStatus(False)
    'End Sub
    'Private Sub AlterarEndereco()
    '    EnderecoBarStatus(True)
    'End Sub
    'Private Sub CancelarEndereco()
    '    bsEndereco.CancelEdit()
    '    EnderecoBarStatus(False)
    'End Sub
    Private Sub ExcluiEndereco()
        Dim endereco As Model.Endereco = CType(bsEndereco.Current, Model.Endereco)
        Dim pessoa As Model.Pessoa = CType(bsCliente.Current, Model.Pessoa)

        ' Grava uma possível alteração anterior
        bsEndereco.EndEdit()

        If Dialog.QuestionYesNo("Deseja realmente remover este registro?") = Windows.Forms.DialogResult.Yes And Not bsEndereco.Current Is Nothing Then
            bsEndereco.Remove(endereco)
            bsEndereco.DataSource = pessoa.Enderecos
        End If
    End Sub
    'Private Sub EnderecoBarStatus(ByVal bYes As Boolean)

    '    pnlContato.Enabled = Not bYes
    '    If bYes = True Then
    '        txtEnderecoRua.Focus()
    '    End If
    '    btnEnderecoIncluir.Enabled = Not bYes
    '    btnEnderecoAlterar.Enabled = Not bYes
    '    btnEnderecoRemover.Enabled = Not bYes

    '    btnEnderecoSalvar.Enabled = bYes
    '    btnEnderecoCancelar.Enabled = bYes

    '    habilitaSalvarCliente(Not bYes)

    '    dgvContato.Enabled = Not bYes
    'End Sub


#End Region


    Private Sub txtCEP_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCEP.Leave
        BuscaCEPCliente()
    End Sub

    Private Sub cbEstado_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbEstado.Leave
        CarregaMunicipioEstado()
    End Sub

    Private Sub txtEnderecoCEP_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtEnderecoCEP.Leave
        BuscaCEPEndereco()
    End Sub




    Private Sub cbEnderecoEstado_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbEnderecoEstado.SelectedIndexChanged
        'EnderecoEstadoSeta()
    End Sub

    Private Sub cbEnderecoMunicipio_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbEnderecoMunicipio.SelectedIndexChanged
        'EnderecoMunicipioSeta()
    End Sub

    Private Sub cbEnderecoPais_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbEnderecoPais.SelectedIndexChanged
        'EnderecoPaisSeta()
    End Sub

    Private Sub dgvEndereco_Click(sender As Object, e As EventArgs) Handles dgvEndereco.Click
        EnderecoPaisLoad()
        EnderecoEstadoLoad()
        EnderecoMunicipioLoad()
    End Sub
End Class
